package org.boot.easyapi.permission.util;

import java.net.URI;
import java.util.regex.Pattern;

public class RequestPathUtil {

    /**
     * 获取端口后、问号前的完整路径（含锚点 #，不含 ?query）
     */
    public static String getPathAfterPort(String url) {
        if (url == null || url.trim().isEmpty()) {
            return "";
        }
        try {
            URI uri = new URI(url);
            String path = uri.getRawPath() == null ? "" : uri.getRawPath();
            String ref  = uri.getRawFragment() == null ? "" : "#" + uri.getRawFragment();
            return path + ref;
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * 将通配符路径转换为正则表达式
     * 支持 * 匹配任意层级
     */
    private static String convertWildcardToRegex(String wildcardPath) {
        return "^" + wildcardPath.replace("*", ".*") + "$";
    }

    /**
     * 判断请求路径是否匹配放行路径（支持通配符）
     * @param allowPath 放行路径
     * @param requestPath 请求路径
     */
    public static boolean isMatch(String allowPath, String requestPath) {
        String regex = convertWildcardToRegex(allowPath);
        return Pattern.matches(regex, requestPath);
    }
}
